home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / dev / gg / openssl-bin.lha / ssl / include / openssl / pkcs7.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-08  |  17.3 KB  |  504 lines

  1. /* crypto/pkcs7/pkcs7.h */
  2. /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  3.  * All rights reserved.
  4.  *
  5.  * This package is an SSL implementation written
  6.  * by Eric Young (eay@cryptsoft.com).
  7.  * The implementation was written so as to conform with Netscapes SSL.
  8.  * 
  9.  * This library is free for commercial and non-commercial use as long as
  10.  * the following conditions are aheared to.  The following conditions
  11.  * apply to all code found in this distribution, be it the RC4, RSA,
  12.  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
  13.  * included with this distribution is covered by the same copyright terms
  14.  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
  15.  * 
  16.  * Copyright remains Eric Young's, and as such any Copyright notices in
  17.  * the code are not to be removed.
  18.  * If this package is used in a product, Eric Young should be given attribution
  19.  * as the author of the parts of the library used.
  20.  * This can be in the form of a textual message at program startup or
  21.  * in documentation (online or textual) provided with the package.
  22.  * 
  23.  * Redistribution and use in source and binary forms, with or without
  24.  * modification, are permitted provided that the following conditions
  25.  * are met:
  26.  * 1. Redistributions of source code must retain the copyright
  27.  *    notice, this list of conditions and the following disclaimer.
  28.  * 2. Redistributions in binary form must reproduce the above copyright
  29.  *    notice, this list of conditions and the following disclaimer in the
  30.  *    documentation and/or other materials provided with the distribution.
  31.  * 3. All advertising materials mentioning features or use of this software
  32.  *    must display the following acknowledgement:
  33.  *    "This product includes cryptographic software written by
  34.  *     Eric Young (eay@cryptsoft.com)"
  35.  *    The word 'cryptographic' can be left out if the rouines from the library
  36.  *    being used are not cryptographic related :-).
  37.  * 4. If you include any Windows specific code (or a derivative thereof) from 
  38.  *    the apps directory (application code) you must include an acknowledgement:
  39.  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
  40.  * 
  41.  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
  42.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  43.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  44.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  45.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  46.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  47.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  48.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  49.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  50.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  51.  * SUCH DAMAGE.
  52.  * 
  53.  * The licence and distribution terms for any publically available version or
  54.  * derivative of this code cannot be changed.  i.e. this code cannot simply be
  55.  * copied and put under another distribution licence
  56.  * [including the GNU Public Licence.]
  57.  */
  58.  
  59. #ifndef HEADER_PKCS7_H
  60. #define HEADER_PKCS7_H
  61.  
  62. #include <openssl/bio.h>
  63. #include <openssl/x509.h>
  64.  
  65. #include <openssl/symhacks.h>
  66.  
  67. #ifdef  __cplusplus
  68. extern "C" {
  69. #endif
  70.  
  71. #ifdef WIN32
  72. /* Under Win32 thes are defined in wincrypt.h */
  73. #undef PKCS7_ISSUER_AND_SERIAL
  74. #undef PKCS7_SIGNER_INFO
  75. #endif
  76.  
  77. /*
  78. Encryption_ID        DES-CBC
  79. Digest_ID        MD5
  80. Digest_Encryption_ID    rsaEncryption
  81. Key_Encryption_ID    rsaEncryption
  82. */
  83.  
  84. typedef struct pkcs7_issuer_and_serial_st
  85.     {
  86.     X509_NAME *issuer;
  87.     ASN1_INTEGER *serial;
  88.     } PKCS7_ISSUER_AND_SERIAL;
  89.  
  90. typedef struct pkcs7_signer_info_st
  91.     {
  92.     ASN1_INTEGER             *version;    /* version 1 */
  93.     PKCS7_ISSUER_AND_SERIAL        *issuer_and_serial;
  94.     X509_ALGOR            *digest_alg;
  95.     STACK_OF(X509_ATTRIBUTE)    *auth_attr;    /* [ 0 ] */
  96.     X509_ALGOR            *digest_enc_alg;
  97.     ASN1_OCTET_STRING        *enc_digest;
  98.     STACK_OF(X509_ATTRIBUTE)    *unauth_attr;    /* [ 1 ] */
  99.  
  100.     /* The private key to sign with */
  101.     EVP_PKEY            *pkey;
  102.     } PKCS7_SIGNER_INFO;
  103.  
  104. DECLARE_STACK_OF(PKCS7_SIGNER_INFO)
  105. DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO)
  106.  
  107. typedef struct pkcs7_recip_info_st
  108.     {
  109.     ASN1_INTEGER            *version;    /* version 0 */
  110.     PKCS7_ISSUER_AND_SERIAL        *issuer_and_serial;
  111.     X509_ALGOR            *key_enc_algor;
  112.     ASN1_OCTET_STRING        *enc_key;
  113.     X509                *cert; /* get the pub-key from this */
  114.     } PKCS7_RECIP_INFO;
  115.  
  116. DECLARE_STACK_OF(PKCS7_RECIP_INFO)
  117. DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO)
  118.  
  119. typedef struct pkcs7_signed_st
  120.     {
  121.     ASN1_INTEGER            *version;    /* version 1 */
  122.     STACK_OF(X509_ALGOR)        *md_algs;    /* md used */
  123.     STACK_OF(X509)            *cert;        /* [ 0 ] */
  124.     STACK_OF(X509_CRL)        *crl;        /* [ 1 ] */
  125.     STACK_OF(PKCS7_SIGNER_INFO)    *signer_info;
  126.  
  127.     struct pkcs7_st            *contents;
  128.     } PKCS7_SIGNED;
  129. /* The above structure is very very similar to PKCS7_SIGN_ENVELOPE.
  130.  * How about merging the two */
  131.  
  132. typedef struct pkcs7_enc_content_st
  133.     {
  134.     ASN1_OBJECT            *content_type;
  135.     X509_ALGOR            *algorithm;
  136.     ASN1_OCTET_STRING        *enc_data;    /* [ 0 ] */
  137.     const EVP_CIPHER        *cipher;
  138.     } PKCS7_ENC_CONTENT;
  139.  
  140. typedef struct pkcs7_enveloped_st
  141.     {
  142.     ASN1_INTEGER            *version;    /* version 0 */
  143.     STACK_OF(PKCS7_RECIP_INFO)    *recipientinfo;
  144.     PKCS7_ENC_CONTENT        *enc_data;
  145.     } PKCS7_ENVELOPE;
  146.  
  147. typedef struct pkcs7_signedandenveloped_st
  148.     {
  149.     ASN1_INTEGER            *version;    /* version 1 */
  150.     STACK_OF(X509_ALGOR)        *md_algs;    /* md used */
  151.     STACK_OF(X509)            *cert;        /* [ 0 ] */
  152.     STACK_OF(X509_CRL)        *crl;        /* [ 1 ] */
  153.     STACK_OF(PKCS7_SIGNER_INFO)    *signer_info;
  154.  
  155.     PKCS7_ENC_CONTENT        *enc_data;
  156.     STACK_OF(PKCS7_RECIP_INFO)    *recipientinfo;
  157.     } PKCS7_SIGN_ENVELOPE;
  158.  
  159. typedef struct pkcs7_digest_st
  160.     {
  161.     ASN1_INTEGER            *version;    /* version 0 */
  162.     X509_ALGOR            *md;        /* md used */
  163.     struct pkcs7_st         *contents;
  164.     ASN1_OCTET_STRING        *digest;
  165.     } PKCS7_DIGEST;
  166.  
  167. typedef struct pkcs7_encrypted_st
  168.     {
  169.     ASN1_INTEGER            *version;    /* version 0 */
  170.     PKCS7_ENC_CONTENT        *enc_data;
  171.     } PKCS7_ENCRYPT;
  172.  
  173. typedef struct pkcs7_st
  174.     {
  175.     /* The following is non NULL if it contains ASN1 encoding of
  176.      * this structure */
  177.     unsigned char *asn1;
  178.     long length;
  179.  
  180. #define PKCS7_S_HEADER    0
  181. #define PKCS7_S_BODY    1
  182. #define PKCS7_S_TAIL    2
  183.     int state; /* used during processing */
  184.  
  185.     int detached;
  186.  
  187.     ASN1_OBJECT *type;
  188.     /* content as defined by the type */
  189.     /* all encryption/message digests are applied to the 'contents',
  190.      * leaving out the 'type' field. */
  191.     union    {
  192.         char *ptr;
  193.  
  194.         /* NID_pkcs7_data */
  195.         ASN1_OCTET_STRING *data;
  196.  
  197.         /* NID_pkcs7_signed */
  198.         PKCS7_SIGNED *sign;
  199.  
  200.         /* NID_pkcs7_enveloped */
  201.         PKCS7_ENVELOPE *enveloped;
  202.  
  203.         /* NID_pkcs7_signedAndEnveloped */
  204.         PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
  205.  
  206.         /* NID_pkcs7_digest */
  207.         PKCS7_DIGEST *digest;
  208.  
  209.         /* NID_pkcs7_encrypted */
  210.         PKCS7_ENCRYPT *encrypted;
  211.  
  212.         /* Anything else */
  213.         ASN1_TYPE *other;
  214.         } d;
  215.     } PKCS7;
  216.  
  217. DECLARE_STACK_OF(PKCS7)
  218. DECLARE_ASN1_SET_OF(PKCS7)
  219. DECLARE_PKCS12_STACK_OF(PKCS7)
  220.  
  221. #define PKCS7_OP_SET_DETACHED_SIGNATURE    1
  222. #define PKCS7_OP_GET_DETACHED_SIGNATURE    2
  223.  
  224. #define PKCS7_get_signed_attributes(si)    ((si)->auth_attr)
  225. #define PKCS7_get_attributes(si)    ((si)->unauth_attr)
  226.  
  227. #define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)
  228. #define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)
  229. #define PKCS7_type_is_signedAndEnveloped(a) \
  230.         (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)
  231. #define PKCS7_type_is_data(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_data)
  232.  
  233. #define PKCS7_set_detached(p,v) \
  234.         PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL)
  235. #define PKCS7_get_detached(p) \
  236.         PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL)
  237.  
  238. #ifdef SSLEAY_MACROS
  239. #ifndef PKCS7_ISSUER_AND_SERIAL_digest
  240. #define PKCS7_ISSUER_AND_SERIAL_digest(data,type,md,len) \
  241.         ASN1_digest((int (*)())i2d_PKCS7_ISSUER_AND_SERIAL,type,\
  242.                     (char *)data,md,len)
  243. #endif
  244. #endif
  245.  
  246. /* S/MIME related flags */
  247.  
  248. #define PKCS7_TEXT        0x1
  249. #define PKCS7_NOCERTS        0x2
  250. #define PKCS7_NOSIGS        0x4
  251. #define PKCS7_NOCHAIN        0x8
  252. #define PKCS7_NOINTERN        0x10
  253. #define PKCS7_NOVERIFY        0x20
  254. #define PKCS7_DETACHED        0x40
  255. #define PKCS7_BINARY        0x80
  256. #define PKCS7_NOATTR        0x100
  257. #define    PKCS7_NOSMIMECAP    0x200
  258.  
  259. /* Flags: for compatibility with older code */
  260.  
  261. #define SMIME_TEXT    PKCS7_TEXT
  262. #define SMIME_NOCERTS    PKCS7_NOCERTS
  263. #define SMIME_NOSIGS    PKCS7_NOSIGS
  264. #define SMIME_NOCHAIN    PKCS7_NOCHAIN
  265. #define SMIME_NOINTERN    PKCS7_NOINTERN
  266. #define SMIME_NOVERIFY    PKCS7_NOVERIFY
  267. #define SMIME_DETACHED    PKCS7_DETACHED
  268. #define SMIME_BINARY    PKCS7_BINARY
  269. #define SMIME_NOATTR    PKCS7_NOATTR
  270.  
  271. PKCS7_ISSUER_AND_SERIAL *PKCS7_ISSUER_AND_SERIAL_new(void );
  272. void            PKCS7_ISSUER_AND_SERIAL_free(
  273.                 PKCS7_ISSUER_AND_SERIAL *a);
  274. int             i2d_PKCS7_ISSUER_AND_SERIAL(
  275.                 PKCS7_ISSUER_AND_SERIAL *a,unsigned char **pp);
  276. PKCS7_ISSUER_AND_SERIAL *d2i_PKCS7_ISSUER_AND_SERIAL(
  277.                 PKCS7_ISSUER_AND_SERIAL **a,
  278.                 unsigned char **pp, long length);
  279.  
  280. #ifndef SSLEAY_MACROS
  281. int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,const EVP_MD *type,
  282.     unsigned char *md,unsigned int *len);
  283. #ifndef NO_FP_API
  284. PKCS7 *d2i_PKCS7_fp(FILE *fp,PKCS7 **p7);
  285. int i2d_PKCS7_fp(FILE *fp,PKCS7 *p7);
  286. #endif
  287. PKCS7 *PKCS7_dup(PKCS7 *p7);
  288. PKCS7 *d2i_PKCS7_bio(BIO *bp,PKCS7 **p7);
  289. int i2d_PKCS7_bio(BIO *bp,PKCS7 *p7);
  290. #endif
  291.  
  292. PKCS7_SIGNER_INFO    *PKCS7_SIGNER_INFO_new(void);
  293. void            PKCS7_SIGNER_INFO_free(PKCS7_SIGNER_INFO *a);
  294. int             i2d_PKCS7_SIGNER_INFO(PKCS7_SIGNER_INFO *a,
  295.                 unsigned char **pp);
  296. PKCS7_SIGNER_INFO    *d2i_PKCS7_SIGNER_INFO(PKCS7_SIGNER_INFO **a,
  297.                 unsigned char **pp,long length);
  298.  
  299. PKCS7_RECIP_INFO    *PKCS7_RECIP_INFO_new(void);
  300. void            PKCS7_RECIP_INFO_free(PKCS7_RECIP_INFO *a);
  301. int             i2d_PKCS7_RECIP_INFO(PKCS7_RECIP_INFO *a,
  302.                 unsigned char **pp);
  303. PKCS7_RECIP_INFO    *d2i_PKCS7_RECIP_INFO(PKCS7_RECIP_INFO **a,
  304.                 unsigned char **pp,long length);
  305.  
  306. PKCS7_SIGNED        *PKCS7_SIGNED_new(void);
  307. void            PKCS7_SIGNED_free(PKCS7_SIGNED *a);
  308. int             i2d_PKCS7_SIGNED(PKCS7_SIGNED *a,
  309.                 unsigned char **pp);
  310. PKCS7_SIGNED        *d2i_PKCS7_SIGNED(PKCS7_SIGNED **a,
  311.                 unsigned char **pp,long length);
  312.  
  313. PKCS7_ENC_CONTENT    *PKCS7_ENC_CONTENT_new(void);
  314. void            PKCS7_ENC_CONTENT_free(PKCS7_ENC_CONTENT *a);
  315. int             i2d_PKCS7_ENC_CONTENT(PKCS7_ENC_CONTENT *a,
  316.                 unsigned char **pp);
  317. PKCS7_ENC_CONTENT    *d2i_PKCS7_ENC_CONTENT(PKCS7_ENC_CONTENT **a,
  318.                 unsigned char **pp,long length);
  319.  
  320. PKCS7_ENVELOPE        *PKCS7_ENVELOPE_new(void);
  321. void            PKCS7_ENVELOPE_free(PKCS7_ENVELOPE *a);
  322. int             i2d_PKCS7_ENVELOPE(PKCS7_ENVELOPE *a,
  323.                 unsigned char **pp);
  324. PKCS7_ENVELOPE        *d2i_PKCS7_ENVELOPE(PKCS7_ENVELOPE **a,
  325.                 unsigned char **pp,long length);
  326.  
  327. PKCS7_SIGN_ENVELOPE    *PKCS7_SIGN_ENVELOPE_new(void);
  328. void            PKCS7_SIGN_ENVELOPE_free(PKCS7_SIGN_ENVELOPE *a);
  329. int             i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a,
  330.                 unsigned char **pp);
  331. PKCS7_SIGN_ENVELOPE    *d2i_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE **a,
  332.                 unsigned char **pp,long length);
  333.  
  334. PKCS7_DIGEST        *PKCS7_DIGEST_new(void);
  335. void            PKCS7_DIGEST_free(PKCS7_DIGEST *a);
  336. int             i2d_PKCS7_DIGEST(PKCS7_DIGEST *a,
  337.                 unsigned char **pp);
  338. PKCS7_DIGEST        *d2i_PKCS7_DIGEST(PKCS7_DIGEST **a,
  339.                 unsigned char **pp,long length);
  340.  
  341. PKCS7_ENCRYPT        *PKCS7_ENCRYPT_new(void);
  342. void            PKCS7_ENCRYPT_free(PKCS7_ENCRYPT *a);
  343. int             i2d_PKCS7_ENCRYPT(PKCS7_ENCRYPT *a,
  344.                 unsigned char **pp);
  345. PKCS7_ENCRYPT        *d2i_PKCS7_ENCRYPT(PKCS7_ENCRYPT **a,
  346.                 unsigned char **pp,long length);
  347.  
  348. PKCS7            *PKCS7_new(void);
  349. void            PKCS7_free(PKCS7 *a);
  350. void            PKCS7_content_free(PKCS7 *a);
  351. int             i2d_PKCS7(PKCS7 *a,
  352.                 unsigned char **pp);
  353. PKCS7            *d2i_PKCS7(PKCS7 **a,
  354.                 unsigned char **pp,long length);
  355.  
  356.  
  357. long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);
  358.  
  359. int PKCS7_set_type(PKCS7 *p7, int type);
  360. int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);
  361. int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
  362.     EVP_MD *dgst);
  363. int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);
  364. int PKCS7_add_certificate(PKCS7 *p7, X509 *x509);
  365. int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509);
  366. int PKCS7_content_new(PKCS7 *p7, int nid);
  367. int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx,
  368.     BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); 
  369. int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
  370.                                 X509 *x509);
  371.  
  372. BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);
  373. int PKCS7_dataFinal(PKCS7 *p7, BIO *bio);
  374. BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);
  375.  
  376.  
  377. PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509,
  378.     EVP_PKEY *pkey, EVP_MD *dgst);
  379. X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);
  380. STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7);
  381.  
  382. PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509);
  383. int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri);
  384. int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509);
  385. int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher);
  386.  
  387. PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx);
  388. ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk);
  389. int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si,int nid,int type,
  390.     void *data);
  391. int PKCS7_add_attribute (PKCS7_SIGNER_INFO *p7si, int nid, int atrtype,
  392.     void *value);
  393. ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid);
  394. ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid);
  395. int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si,
  396.                 STACK_OF(X509_ATTRIBUTE) *sk);
  397. int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,STACK_OF(X509_ATTRIBUTE) *sk);
  398.  
  399.  
  400. PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
  401.                             BIO *data, int flags);
  402. int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
  403.                     BIO *indata, BIO *out, int flags);
  404. STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags);
  405. PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,
  406.                                 int flags);
  407. int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
  408.  
  409. int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,
  410.                   STACK_OF(X509_ALGOR) *cap);
  411. STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);
  412. int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg);
  413.  
  414. int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
  415. PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
  416. int SMIME_crlf_copy(BIO *in, BIO *out, int flags);
  417. int SMIME_text(BIO *in, BIO *out);
  418.  
  419. /* BEGIN ERROR CODES */
  420. /* The following lines are auto generated by the script mkerr.pl. Any changes
  421.  * made after this point may be overwritten when the script is next run.
  422.  */
  423. void ERR_load_PKCS7_strings(void);
  424.  
  425. /* Error codes for the PKCS7 functions. */
  426.  
  427. /* Function codes. */
  428. #define PKCS7_F_B64_READ_PKCS7                 120
  429. #define PKCS7_F_B64_WRITE_PKCS7                 121
  430. #define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP         118
  431. #define PKCS7_F_PKCS7_ADD_CERTIFICATE             100
  432. #define PKCS7_F_PKCS7_ADD_CRL                 101
  433. #define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO         102
  434. #define PKCS7_F_PKCS7_ADD_SIGNER             103
  435. #define PKCS7_F_PKCS7_CTRL                 104
  436. #define PKCS7_F_PKCS7_DATADECODE             112
  437. #define PKCS7_F_PKCS7_DATAINIT                 105
  438. #define PKCS7_F_PKCS7_DATASIGN                 106
  439. #define PKCS7_F_PKCS7_DATAVERIFY             107
  440. #define PKCS7_F_PKCS7_DECRYPT                 114
  441. #define PKCS7_F_PKCS7_ENCRYPT                 115
  442. #define PKCS7_F_PKCS7_GET0_SIGNERS             124
  443. #define PKCS7_F_PKCS7_SET_CIPHER             108
  444. #define PKCS7_F_PKCS7_SET_CONTENT             109
  445. #define PKCS7_F_PKCS7_SET_TYPE                 110
  446. #define PKCS7_F_PKCS7_SIGN                 116
  447. #define PKCS7_F_PKCS7_SIGNATUREVERIFY             113
  448. #define PKCS7_F_PKCS7_SIMPLE_SMIMECAP             119
  449. #define PKCS7_F_PKCS7_VERIFY                 117
  450. #define PKCS7_F_SMIME_READ_PKCS7             122
  451. #define PKCS7_F_SMIME_TEXT                 123
  452.  
  453. /* Reason codes. */
  454. #define PKCS7_R_CERTIFICATE_VERIFY_ERROR         117
  455. #define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER         144
  456. #define PKCS7_R_CIPHER_NOT_INITIALIZED             116
  457. #define PKCS7_R_CONTENT_AND_DATA_PRESENT         118
  458. #define PKCS7_R_DECODE_ERROR                 130
  459. #define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH         100
  460. #define PKCS7_R_DECRYPT_ERROR                 119
  461. #define PKCS7_R_DIGEST_FAILURE                 101
  462. #define PKCS7_R_ERROR_ADDING_RECIPIENT             120
  463. #define PKCS7_R_ERROR_SETTING_CIPHER             121
  464. #define PKCS7_R_INTERNAL_ERROR                 102
  465. #define PKCS7_R_INVALID_MIME_TYPE             131
  466. #define PKCS7_R_INVALID_NULL_POINTER             143
  467. #define PKCS7_R_MIME_NO_CONTENT_TYPE             132
  468. #define PKCS7_R_MIME_PARSE_ERROR             133
  469. #define PKCS7_R_MIME_SIG_PARSE_ERROR             134
  470. #define PKCS7_R_MISSING_CERIPEND_INFO             103
  471. #define PKCS7_R_NO_CONTENT                 122
  472. #define PKCS7_R_NO_CONTENT_TYPE                 135
  473. #define PKCS7_R_NO_MULTIPART_BODY_FAILURE         136
  474. #define PKCS7_R_NO_MULTIPART_BOUNDARY             137
  475. #define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE     115
  476. #define PKCS7_R_NO_SIGNATURES_ON_DATA             123
  477. #define PKCS7_R_NO_SIGNERS                 142
  478. #define PKCS7_R_NO_SIG_CONTENT_TYPE             138
  479. #define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE     104
  480. #define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR         124
  481. #define PKCS7_R_PKCS7_DATAFINAL_ERROR             125
  482. #define PKCS7_R_PKCS7_DATASIGN                 126
  483. #define PKCS7_R_PKCS7_PARSE_ERROR             139
  484. #define PKCS7_R_PKCS7_SIG_PARSE_ERROR             140
  485. #define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE     127
  486. #define PKCS7_R_SIGNATURE_FAILURE             105
  487. #define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND         128
  488. #define PKCS7_R_SIG_INVALID_MIME_TYPE             141
  489. #define PKCS7_R_SMIME_TEXT_ERROR             129
  490. #define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE         106
  491. #define PKCS7_R_UNABLE_TO_FIND_MEM_BIO             107
  492. #define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST         108
  493. #define PKCS7_R_UNKNOWN_DIGEST_TYPE             109
  494. #define PKCS7_R_UNKNOWN_OPERATION             110
  495. #define PKCS7_R_UNSUPPORTED_CIPHER_TYPE             111
  496. #define PKCS7_R_UNSUPPORTED_CONTENT_TYPE         112
  497. #define PKCS7_R_WRONG_CONTENT_TYPE             113
  498. #define PKCS7_R_WRONG_PKCS7_TYPE             114
  499.  
  500. #ifdef  __cplusplus
  501. }
  502. #endif
  503. #endif
  504.